package br.com.datasun.biblioteca.ui;

import images.ImageLoader;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.border.EmptyBorder;

import br.com.datasun.biblioteca.entities.Autor;
import br.com.datasun.biblioteca.entities.Livro;
import br.com.datasun.biblioteca.ui.controller.DefinicaoAutorDoLivroController;


public class DefinicaoAutorDoLivroUI extends JDialog {

	private final JPanel contentPanel = new JPanel();
	private JPanel buttonPane = new JPanel();
	private JButton jbSalvar = new JButton("");
	private final JPanel jpCabecalho = new JPanel();
	private final JPanel JpTabela = new JPanel();
	private final JLabel jlTitulo = new JLabel("T\u00EDtulo");
	private final JLabel jlTituloDescricao = new JLabel("New label");
	private final JLabel jlEdicao = new JLabel("Edi\u00E7\u00E3o");
	private final JLabel jlIsbnDescricao = new JLabel("New label");
	private final JLabel jlEditora = new JLabel("Editora");
	private final JLabel jlEdicaoDescricao = new JLabel("New label");
	private final JLabel jlEditoraDescricao = new JLabel("New label");
	
	private Livro livroSelecionado;
	private DefinicaoAutorDoLivroController controller;
	private final JLabel jlIsbn13 = new JLabel("ISBN");
	private final JLabel jlDefinicao = new JLabel("Defini\u00E7\u00E3o de Autores do Livro");
	private final JPanel jpLabels = new JPanel();
	private final JPanel jpEsquerda = new JPanel();
	private final JPanel jpDireita = new JPanel();
	private final JPanel jpBotoes = new JPanel();
	private final JList ltAutoresLivro = new JList();
	private final JLabel lblListaEsquerda = new JLabel("                 ");
	private final JLabel lblListaEsquerdaPosicaoDireita = new JLabel("                 ");
	private final JLabel label = new JLabel("                 ");
	private final JLabel label_1 = new JLabel("                 ");
	private final JList ltAutoresDisponiveis = new JList();
	private final JButton jbCancelar = new JButton("");
	private final JLabel lblNewLabel = new JLabel("                                                                                   ");
	private final JLabel lblAutoresDoLivro = new JLabel("Autores do Livro");
	private final JLabel lblAutoresDisponveis = new JLabel("Autores Dispon\u00EDveis");
	private final JButton jbAutoresDisponiveis = new JButton("");
	private final JButton jbAutoresLivro = new JButton("");
    private JScrollPane jScrollPane = new JScrollPane();
    private List<Autor> autoresRetirado =  new ArrayList<Autor>();

	
	/**
	 * Create the dialog.
	 */
	public DefinicaoAutorDoLivroUI(Livro livro) {
		setResizable(false);
		this.livroSelecionado = livro;
		setTitle("Defini\u00E7\u00E3o de Autores do Livro");
		setBounds(100, 100, 642, 499);
		getContentPane().setLayout(new BorderLayout());
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(new BorderLayout(0, 0));
		
		contentPanel.add(jpCabecalho, BorderLayout.NORTH);
		jpCabecalho.setPreferredSize(new Dimension(0,200));
		GridBagLayout gbl_jpCabecalho = new GridBagLayout();
		gbl_jpCabecalho.columnWidths = new int[]{126, 180, 70, 70, 0, 0, 0};
		gbl_jpCabecalho.rowHeights = new int[]{0, 0, 28, 25, 25, 25, 25, 25, 0};
		gbl_jpCabecalho.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
		gbl_jpCabecalho.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
		jpCabecalho.setLayout(gbl_jpCabecalho);
		
		GridBagConstraints gbc_jlDefinicao = new GridBagConstraints();
		gbc_jlDefinicao.gridwidth = 6;
		gbc_jlDefinicao.insets = new Insets(0, 0, 5, 0);
		gbc_jlDefinicao.gridx = 0;
		gbc_jlDefinicao.gridy = 1;
		jlDefinicao.setFont(new Font("Tahoma", Font.BOLD, 11));
		jpCabecalho.add(jlDefinicao, gbc_jlDefinicao);
		
		GridBagConstraints gbc_jlTitulo = new GridBagConstraints();
		gbc_jlTitulo.insets = new Insets(0, 0, 5, 5);
		gbc_jlTitulo.anchor = GridBagConstraints.SOUTHEAST;
		gbc_jlTitulo.gridx = 0;
		gbc_jlTitulo.gridy = 2;
		jlTitulo.setFont(new Font("Tahoma", Font.BOLD, 11));
		jpCabecalho.add(jlTitulo, gbc_jlTitulo);
		
		GridBagConstraints gbc_jlTituloDescricao = new GridBagConstraints();
		gbc_jlTituloDescricao.gridwidth = 3;
		gbc_jlTituloDescricao.insets = new Insets(0, 0, 5, 5);
		gbc_jlTituloDescricao.anchor = GridBagConstraints.SOUTHWEST;
		gbc_jlTituloDescricao.gridx = 1;
		gbc_jlTituloDescricao.gridy = 2;
		jpCabecalho.add(jlTituloDescricao, gbc_jlTituloDescricao);
		
		GridBagConstraints gbc_jlIsbn13 = new GridBagConstraints();
		gbc_jlIsbn13.anchor = GridBagConstraints.EAST;
		gbc_jlIsbn13.insets = new Insets(0, 0, 5, 5);
		gbc_jlIsbn13.gridx = 0;
		gbc_jlIsbn13.gridy = 3;
		jlIsbn13.setFont(new Font("Tahoma", Font.BOLD, 11));
		jpCabecalho.add(jlIsbn13, gbc_jlIsbn13);
		
		GridBagConstraints gbc_jlIsbnDescricao = new GridBagConstraints();
		gbc_jlIsbnDescricao.gridwidth = 3;
		gbc_jlIsbnDescricao.insets = new Insets(0, 0, 5, 5);
		gbc_jlIsbnDescricao.anchor = GridBagConstraints.WEST;
		gbc_jlIsbnDescricao.gridx = 1;
		gbc_jlIsbnDescricao.gridy = 3;
		jpCabecalho.add(jlIsbnDescricao, gbc_jlIsbnDescricao);
		
		GridBagConstraints gbc_jlEdicao = new GridBagConstraints();
		gbc_jlEdicao.anchor = GridBagConstraints.EAST;
		gbc_jlEdicao.insets = new Insets(0, 0, 5, 5);
		gbc_jlEdicao.gridx = 0;
		gbc_jlEdicao.gridy = 4;
		jlEdicao.setFont(new Font("Tahoma", Font.BOLD, 11));
		jpCabecalho.add(jlEdicao, gbc_jlEdicao);
		
		GridBagConstraints gbc_jlEdicaoDescricao = new GridBagConstraints();
		gbc_jlEdicaoDescricao.gridwidth = 3;
		gbc_jlEdicaoDescricao.insets = new Insets(0, 0, 5, 5);
		gbc_jlEdicaoDescricao.anchor = GridBagConstraints.WEST;
		gbc_jlEdicaoDescricao.gridx = 1;
		gbc_jlEdicaoDescricao.gridy = 4;
		jpCabecalho.add(jlEdicaoDescricao, gbc_jlEdicaoDescricao);
		
		GridBagConstraints gbc_jlEditora = new GridBagConstraints();
		gbc_jlEditora.anchor = GridBagConstraints.EAST;
		gbc_jlEditora.insets = new Insets(0, 0, 5, 5);
		gbc_jlEditora.gridx = 0;
		gbc_jlEditora.gridy = 5;
		jlEditora.setFont(new Font("Tahoma", Font.BOLD, 11));
		jpCabecalho.add(jlEditora, gbc_jlEditora);
		
		GridBagConstraints gbc_jlEditoraDescricao = new GridBagConstraints();
		gbc_jlEditoraDescricao.gridwidth = 3;
		gbc_jlEditoraDescricao.insets = new Insets(0, 0, 5, 5);
		gbc_jlEditoraDescricao.anchor = GridBagConstraints.WEST;
		gbc_jlEditoraDescricao.gridx = 1;
		gbc_jlEditoraDescricao.gridy = 5;
		jpCabecalho.add(jlEditoraDescricao, gbc_jlEditoraDescricao);
		
		GridBagConstraints gbc_jlAnoLancamentoDescricao = new GridBagConstraints();
		gbc_jlAnoLancamentoDescricao.gridwidth = 3;
		gbc_jlAnoLancamentoDescricao.insets = new Insets(0, 0, 5, 5);
		gbc_jlAnoLancamentoDescricao.anchor = GridBagConstraints.WEST;
		gbc_jlAnoLancamentoDescricao.gridx = 1;
		gbc_jlAnoLancamentoDescricao.gridy = 6;
		
		
		contentPanel.add(JpTabela, BorderLayout.CENTER);
		JpTabela.setLayout(new BorderLayout(0, 0));
		
		jpLabels.setPreferredSize(new Dimension(0,30));
		JpTabela.add(jpLabels, BorderLayout.NORTH);
		jpLabels.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
		lblAutoresDoLivro.setFont(new Font("Tahoma", Font.BOLD, 11));
		
		jpLabels.add(lblAutoresDoLivro);
		
		jpLabels.add(lblNewLabel);
		lblAutoresDisponveis.setFont(new Font("Tahoma", Font.BOLD, 11));
		
		jpLabels.add(lblAutoresDisponveis);
		
		
		Dimension dimencaoLaterais = new Dimension(250,0); 
		jpEsquerda.setPreferredSize(dimencaoLaterais);
		JpTabela.add(jpEsquerda, BorderLayout.WEST);
		jpEsquerda.setLayout(new BorderLayout(0, 0));
		
		Dimension dimencaoListas = new Dimension(20,20);
		ltAutoresLivro.setPreferredSize(dimencaoListas);
		
		
		//JScrollPane jScrollPane = new JScrollPane();
		//jpEsquerda.add(jScrollPane, BorderLayout.CENTER);  
		//jScrollPane.setViewportView(ltAutoresLivro);  
		
		jpEsquerda.add(ltAutoresLivro, BorderLayout.CENTER);
		
		 
		
		jpEsquerda.add(lblListaEsquerda, BorderLayout.WEST);
		
		jpEsquerda.add(lblListaEsquerdaPosicaoDireita, BorderLayout.EAST);
		jpDireita.setPreferredSize(dimencaoLaterais);
		JpTabela.add(jpDireita, BorderLayout.EAST);
		jpDireita.setLayout(new BorderLayout(0, 0));
		
		jpDireita.add(label, BorderLayout.WEST);
		
		jpDireita.add(label_1, BorderLayout.EAST);
		ltAutoresDisponiveis.setPreferredSize(new Dimension(20, 20));
		
		jpDireita.add(ltAutoresDisponiveis, BorderLayout.CENTER);
		
		JpTabela.add(jpBotoes, BorderLayout.CENTER);
		GridBagLayout gbl_jpBotoes = new GridBagLayout();
		gbl_jpBotoes.columnWidths = new int[]{44, 0, 0, 0};
		gbl_jpBotoes.rowHeights = new int[]{50, 0, 0, 42, 0};
		gbl_jpBotoes.columnWeights = new double[]{0.0, 0.0, 0.0, Double.MIN_VALUE};
		gbl_jpBotoes.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
		jpBotoes.setLayout(gbl_jpBotoes);
		
		GridBagConstraints gbc_jbAutoresDisponiveis = new GridBagConstraints();
		gbc_jbAutoresDisponiveis.insets = new Insets(0, 0, 5, 5);
		gbc_jbAutoresDisponiveis.gridx = 1;
		gbc_jbAutoresDisponiveis.gridy = 1;
		 
		jbAutoresDisponiveis.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			}
		});
		
		Dimension tamanhoBotaoMeio = new Dimension(40,40);
		jbAutoresDisponiveis.setPreferredSize(tamanhoBotaoMeio);
		jbAutoresDisponiveis.setIcon(ImageLoader.createImageIcon("btnToLeft_40x40.png") ) ;
		
		jpBotoes.add(jbAutoresDisponiveis, gbc_jbAutoresDisponiveis);
		jbAutoresLivro.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
			   
			  
			  int pos              = ltAutoresLivro.getSelectedIndex();
			  Autor autorRetirado  = (Autor) ltAutoresLivro.getSelectedValue() ;
			  autoresRetirado.add(autorRetirado);
			  
			}
		  }	   
			
		);
		
		jbAutoresLivro.setPreferredSize(tamanhoBotaoMeio);
		jbAutoresLivro.setIcon(ImageLoader.createImageIcon("btnToRight_40x40.png") ) ;
		
		GridBagConstraints gbc_jbAutoresLivro = new GridBagConstraints();
		gbc_jbAutoresLivro.insets = new Insets(0, 0, 5, 5);
		gbc_jbAutoresLivro.gridx = 1;
		gbc_jbAutoresLivro.gridy = 2;
		
		
		jpBotoes.add(jbAutoresLivro, gbc_jbAutoresLivro);
		
		buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
		getContentPane().add(buttonPane, BorderLayout.SOUTH);
		jbSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				//controller.btnFecharEventHandler();
			}
		});
		jbCancelar.setPreferredSize(new Dimension(115, 25));
		jbCancelar.setIcon(ImageLoader.createImageIcon("btnCancelar115x25.png"));
		buttonPane.add(jbCancelar);
		
		jbSalvar.setPreferredSize(new Dimension(115,25));
		jbSalvar.setIcon(ImageLoader.createImageIcon("btnSalvar115x25.png"));
		
		buttonPane.add(jbSalvar);		
		
		limparFormulario();
		controller = new DefinicaoAutorDoLivroController(this);
		controller.carregarDados(livroSelecionado);
	
	}
	
	
	public void exibirDadosLivroSelecionado(List<Autor> listaAutoresDisponiveis){
		jlTituloDescricao.setText(livroSelecionado.getTitulo());
		jlIsbnDescricao.setText(livroSelecionado.getIsbn13());
		jlEdicaoDescricao.setText(Integer.toString(livroSelecionado.getEdicao()) );
		jlEditoraDescricao.setText(livroSelecionado.getEditora().getNome());
	    
		//LISTA  
		DefaultListModel modeloListaAutores = new DefaultListModel();  
		List<Autor> listaAutores = livroSelecionado.getAutores();    
		if (listaAutores != null) {
		  for (Autor autor : listaAutores){
		    	modeloListaAutores.addElement(autor);	
		  }	    
	      ltAutoresLivro.setModel(modeloListaAutores);
		}
	     
		DefaultListModel modeloListaAutoresDisponiveis = new DefaultListModel();  
		   
		
		if (listaAutoresDisponiveis != null) {
		  for (Autor autor : listaAutoresDisponiveis){
			  modeloListaAutoresDisponiveis.addElement(autor);	
		  }	    
	      ltAutoresDisponiveis.setModel(modeloListaAutoresDisponiveis);
		}
	}
	
	
	public void limparFormulario(){
		jlTituloDescricao.setText("");
		jlIsbnDescricao.setText("");
		jlEdicaoDescricao.setText("");
		jlEditoraDescricao.setText("");
	}
	
	public Livro getLivro() {
		return livroSelecionado;
	}
	
	public void disponibilizarAutores(List<Autor> listaAutores) {
		
	}
	
	public void inserirAutoresLivro (){
		
	}

	
}
